/** layui-v2.4.5 MIT License By https://www.layui.com */
layui.define("layer", function (e) {
    "use strict";
    var i = layui.$,
        t = layui.layer,
        n = layui.hint(),
        a = layui.device(),
        o = {
            config: {},
            set: function (e) {
                var t = this;
                return (t.config = i.extend({}, t.config, e)), t;
            },
            on: function (e, i) {
                return layui.onevent.call(this, r, e, i);
            },
        },
        l = function () {
            var e = this;
            return {
                upload: function (i) {
                    e.upload.call(e, i);
                },
                config: e.config,
            };
        },
        r = "upload",
        u = "layui-upload-file",
        c = "layui-upload-form",
        f = "layui-upload-iframe",
        s = "layui-upload-choose",
        p = function (e) {
            var t = this;
            (t.config = i.extend({}, t.config, o.config, e)), t.render();
        };
    (p.prototype.config = { accept: "images", exts: "", auto: !0, bindAction: "", url: "", field: "file", method: "post", data: {}, drag: !0, size: 0, number: 0, multiple: !1 }),
        (p.prototype.render = function (e) {
            var t = this,
                e = t.config;
            (e.elem = i(e.elem)), (e.bindAction = i(e.bindAction)), t.file(), t.events();
        }),
        (p.prototype.file = function () {
            var e = this,
                t = e.config,
                n = (e.elemFile = i(['<input class="' + u + '" type="file" accept="' + t.acceptMime + '" name="' + t.field + '"', t.multiple ? " multiple" : "", ">"].join(""))),
                o = t.elem.next();
            (o.hasClass(u) || o.hasClass(c)) && o.remove(),
                a.ie && a.ie < 10 && t.elem.wrap('<div class="layui-upload-wrap"></div>'),
                e.isFile() ? ((e.elemFile = t.elem), (t.field = t.elem[0].name)) : t.elem.after(n),
                a.ie && a.ie < 10 && e.initIE();
        }),
        (p.prototype.initIE = function () {
            var e = this,
                t = e.config,
                n = i('<iframe id="' + f + '" class="' + f + '" name="' + f + '" frameborder="0"></iframe>'),
                a = i(['<form target="' + f + '" class="' + c + '" method="post" key="set-mine" enctype="multipart/form-data" action="' + t.url + '">', "</form>"].join(""));
            i("#" + f)[0] || i("body").append(n),
                t.elem.next().hasClass(c) ||
                    (e.elemFile.wrap(a),
                    t.elem.next("." + c).append(
                        (function () {
                            var e = [];
                            return (
                                layui.each(t.data, function (i, t) {
                                    (t = "function" == typeof t ? t() : t), e.push('<input type="hidden" name="' + i + '" value="' + t + '">');
                                }),
                                e.join("")
                            );
                        })()
                    ));
        }),
        (p.prototype.msg = function (e) {
            return t.msg(e, { icon: 2, shift: 6 });
        }),
        (p.prototype.isFile = function () {
            var e = this.config.elem[0];
            if (e) return "input" === e.tagName.toLocaleLowerCase() && "file" === e.type;
        }),
        (p.prototype.preview = function (e) {
            var i = this;
            window.FileReader &&
                layui.each(i.chooseFiles, function (i, t) {
                    var n = new FileReader();
                    n.readAsDataURL(t),
                        (n.onload = function () {
                            e && e(i, t, this.result);
                        });
                });
        }),
        (p.prototype.upload = function (e, t) {
            var n,
                o = this,
                l = o.config,
                r = o.elemFile[0],
                u = function () {
                    var t = 0,
                        n = 0,
                        a = e || o.files || o.chooseFiles || r.files,
                        u = function () {
                            l.multiple && t + n === o.fileLength && "function" == typeof l.allDone && l.allDone({ total: o.fileLength, successful: t, aborted: n });
                        };
                    layui.each(a, function (e, a) {
                        var r = new FormData();
                        r.append(l.field, a),
                            layui.each(l.data, function (e, i) {
                                (i = "function" == typeof i ? i() : i), r.append(e, i);
                            }),
                            i.ajax({
                                url: l.url,
                                type: "post",
                                data: r,
                                contentType: !1,
                                processData: !1,
                                dataType: "json",
                                headers: l.headers || {},
                                success: function (i) {
                                    t++, d(e, i), u();
                                },
                                error: function () {
                                    n++, o.msg("请求上传接口出现异常"), m(e), u();
                                },
                            });
                    });
                },
                c = function () {
                    var e = i("#" + f);
                    o.elemFile.parent().submit(),
                        clearInterval(p.timer),
                        (p.timer = setInterval(function () {
                            var i,
                                t = e.contents().find("body");
                            try {
                                i = t.text();
                            } catch (n) {
                                o.msg("获取上传后的响应信息出现异常"), clearInterval(p.timer), m();
                            }
                            i && (clearInterval(p.timer), t.html(""), d(0, i));
                        }, 30));
                },
                d = function (e, i) {
                    if ((o.elemFile.next("." + s).remove(), (r.value = ""), "object" != typeof i))
                        try {
                            i = JSON.parse(i);
                        } catch (t) {
                            return (i = {}), o.msg("请对上传接口返回有效JSON");
                        }
                    "function" == typeof l.done &&
                        l.done(i, e || 0, function (e) {
                            o.upload(e);
                        });
                },
                m = function (e) {
                    l.auto && (r.value = ""),
                        "function" == typeof l.error &&
                            l.error(e || 0, function (e) {
                                o.upload(e);
                            });
                },
                h = l.exts,
                v = (function () {
                    var i = [];
                    return (
                        layui.each(e || o.chooseFiles, function (e, t) {
                            i.push(t.name);
                        }),
                        i
                    );
                })(),
                g = {
                    preview: function (e) {
                        o.preview(e);
                    },
                    upload: function (e, i) {
                        var t = {};
                        (t[e] = i), o.upload(t);
                    },
                    pushFile: function () {
                        return (
                            (o.files = o.files || {}),
                            layui.each(o.chooseFiles, function (e, i) {
                                o.files[e] = i;
                            }),
                            o.files
                        );
                    },
                    resetFile: function (e, i, t) {
                        var n = new File([i], t);
                        (o.files = o.files || {}), (o.files[e] = n);
                    },
                },
                y = function () {
                    if (("choose" !== t && !l.auto) || (l.choose && l.choose(g), "choose" !== t)) return l.before && l.before(g), a.ie ? (a.ie > 9 ? u() : c()) : void u();
                };
            if (((v = 0 === v.length ? r.value.match(/[^\/\\]+\..+/g) || [] || "" : v), 0 !== v.length)) {
                switch (l.accept) {
                    case "file":
                        if (h && !RegExp("\\w\\.(" + h + ")$", "i").test(escape(v))) return o.msg("选择的文件中包含不支持的格式"), (r.value = "");
                        break;
                    case "video":
                        if (!RegExp("\\w\\.(" + (h || "avi|mp4|wma|rmvb|rm|flash|3gp|flv") + ")$", "i").test(escape(v)))
                            return o.msg("选择的视频中包含不支持的格式"), (r.value = "");
                        break;
                    case "audio":
                        if (!RegExp("\\w\\.(" + (h || "mp3|wav|mid") + ")$", "i").test(escape(v))) return o.msg("选择的音频中包含不支持的格式"), (r.value = "");
                        break;
                    default:
                        if (
                            (layui.each(v, function (e, i) {
                                RegExp("\\w\\.(" + (h || "jpg|png|gif|bmp|jpeg$") + ")", "i").test(escape(i)) || (n = !0);
                            }),
                            n)
                        )
                            return o.msg("选择的图片中包含不支持的格式"), (r.value = "");
                }
                if (
                    ((o.fileLength = (function () {
                        var i = 0,
                            t = e || o.files || o.chooseFiles || r.files;
                        return (
                            layui.each(t, function () {
                                i++;
                            }),
                            i
                        );
                    })()),
                    l.number && o.fileLength > l.number)
                )
                    return o.msg("同时最多只能上传的数量为：" + l.number);
                if (l.size > 0 && !(a.ie && a.ie < 10)) {
                    var F;
                    if (
                        (layui.each(o.chooseFiles, function (e, i) {
                            if (i.size > 1024 * l.size) {
                                var t = l.size / 1024;
                                (t = t >= 1 ? t.toFixed(2) + "MB" : l.size + "KB"), (r.value = ""), (F = t);
                            }
                        }),
                        F)
                    )
                        return o.msg("文件不能超过" + F);
                }
                y();
            }
        }),
        (p.prototype.events = function () {
            var e = this,
                t = e.config,
                o = function (i) {
                    (e.chooseFiles = {}),
                        layui.each(i, function (i, t) {
                            var n = new Date().getTime();
                            e.chooseFiles[n + "-" + i] = t;
                        });
                },
                l = function (i, n) {
                    var a = e.elemFile,
                        o = i.length > 1 ? i.length + "个文件" : (i[0] || {}).name || a[0].value.match(/[^\/\\]+\..+/g) || [] || "";
                    a.next().hasClass(s) && a.next().remove(), e.upload(null, "choose"), e.isFile() || t.choose || a.after('<span class="layui-inline ' + s + '">' + o + "</span>");
                };
            t.elem.off("upload.start").on("upload.start", function () {
                var a = i(this),
                    o = a.attr("lay-data");
                if (o)
                    try {
                        (o = new Function("return " + o)()), (e.config = i.extend({}, t, o));
                    } catch (l) {
                        n.error("Upload element property lay-data configuration item has a syntax error: " + o);
                    }
                (e.config.item = a), e.elemFile[0].click();
            }),
                (a.ie && a.ie < 10) ||
                    t.elem
                        .off("upload.over")
                        .on("upload.over", function () {
                            var e = i(this);
                            e.attr("lay-over", "");
                        })
                        .off("upload.leave")
                        .on("upload.leave", function () {
                            var e = i(this);
                            e.removeAttr("lay-over");
                        })
                        .off("upload.drop")
                        .on("upload.drop", function (n, a) {
                            var r = i(this),
                                u = a.originalEvent.dataTransfer.files || [];
                            r.removeAttr("lay-over"), o(u), t.auto ? e.upload(u) : l(u);
                        }),
                e.elemFile.off("upload.change").on("upload.change", function () {
                    var i = this.files || [];
                    o(i), t.auto ? e.upload() : l(i);
                }),
                t.bindAction.off("upload.action").on("upload.action", function () {
                    e.upload();
                }),
                t.elem.data("haveEvents") ||
                    (e.elemFile.on("change", function () {
                        i(this).trigger("upload.change");
                    }),
                    t.elem.on("click", function () {
                        e.isFile() || i(this).trigger("upload.start");
                    }),
                    t.drag &&
                        t.elem
                            .on("dragover", function (e) {
                                e.preventDefault(), i(this).trigger("upload.over");
                            })
                            .on("dragleave", function (e) {
                                i(this).trigger("upload.leave");
                            })
                            .on("drop", function (e) {
                                e.preventDefault(), i(this).trigger("upload.drop", e);
                            }),
                    t.bindAction.on("click", function () {
                        i(this).trigger("upload.action");
                    }),
                    t.elem.data("haveEvents", !0));
        }),
        (o.render = function (e) {
            var i = new p(e);
            return l.call(i);
        }),
        e(r, o);
});
